package v1ch04.CalendarTest;

import java.time.*;

/**
 * LocalDate 用法
 * 打印月历和年历
 *
 * @author Cay Horstmann
 * @version 1.5 2015-05-08
 */

public class CalendarTest {
	public static void main(String[] args) {
		LocalDate localDate;
		//localDate = LocalDate.of(2020, 12, 02);//指定日期
		localDate = LocalDate.now();//当前日期
		//printByMonth(localDate);
		printByYear(localDate);
	}
	
	
	/**
	 * 打印月日历
	 *
	 * @param date
	 */
	private static void printByMonth(LocalDate date) {
		int years = date.getYear();
		int month = date.getMonthValue();
		int today = date.getDayOfMonth();
		date = date.minusDays(today - 1); // 设置为月初（获取当前月月初日期），如：2020年12月01日
		DayOfWeek weekday = date.getDayOfWeek();//星期几，一周中第几天（）
		//这些值按照ISO-8601标准编号，从1（星期一）到7（星期日）.
		int value = weekday.getValue(); //本月初1号
		//System.out.println("初始化月初后，1号所在星期几：" + value);
		System.out.println("==================" + years + "年" + month + "月==================");
		System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期天");
		//表格里月初1号前面的空白部分
		for (int i = 1; i < value; i++) {
			System.out.print("      ");
		}
		while (date.getMonthValue() == month) {
			System.out.printf("%5d", date.getDayOfMonth());
			if (date.getDayOfMonth() == today) {
				System.out.print("*");
			} else {
				System.out.print(" ");
			}
			//当前日期是星期天时，换行，准备打印下一行
			if (date.getDayOfWeek().getValue() == 7) {
				System.out.println();
			}
			//日期+1
			date = date.plusDays(1);
		}
		//换行
		if (date.getDayOfWeek().getValue() != 1) {
			System.out.println();
		}
	}
	
	/**
	 * 打印年日历
	 *
	 * @param date
	 */
	private static void printByYear(LocalDate date) {
		int years = date.getYear();
		int month = date.getMonthValue();
		int today = date.getDayOfMonth();
		DayOfWeek weekday;
		int value;
		for (int i = 1; i <= 12; i++) {
			date = LocalDate.of(years, i, 1);
			weekday = date.getDayOfWeek();//星期几，一周中第几天（）
			value = weekday.getValue(); //本月初1号
			System.out.println("==================" + years + "年" + i + "月==================");
			System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期天");
			//表格里月初1号前面的空白部分
			for (int j = 1; j < value; j++) {
				System.out.print("      ");
			}
			while (date.getMonthValue() == i) {
				System.out.printf("%5d", date.getDayOfMonth());
				if (month == i && date.getDayOfMonth() == today) {
					System.out.print("*");
				} else {
					System.out.print(" ");
				}
				//当前日期是星期天时，换行，准备打印下一行
				if (date.getDayOfWeek().getValue() == 7) {
					System.out.println();
				}
				//日期+1
				date = date.plusDays(1);
			}
			//换行
			if (date.getDayOfWeek().getValue() != 1) {
				System.out.println();
			}
			System.out.println();
		}
	}
}